访问电脑版页面

导航:老古开发网手机版51单片机与步进电机

如何采用51单片机控制电机的旋转角度?

导读:
关键字:
51单片机,电机,

typedefunsignedcharuchar;

typedefunsignedintuint;

typedefunsignedlongulong;

ucharcodebeatCode[8]={

0xE,0xC,0xD,0x9,0xB,0x3,0x7,0x6

};

ulongbeats=0;

ucharT0RH=0,T0RL=0;

voidturnMotor(ulongangle){

EA=0;

beats=angle*4076/360;

EA=1;

}

voidsetTImer0(uintms){

ulongtmp;

tmp=11059326/12;

tmp=tmp*ms/1000;

tmp=65536-tmp;

tmp+=28;

T0RL=tmp;

T0RH=tmp>>8;

}

voidinterruptTImer0()interrupt1{

staTIcucharindex=0;

TH0=T0RH;

TL0=T0RL;

if(beats){

uchartmp=P1;

tmp&=0xF0;

tmp|=beatCode[index];

P1=tmp;

index=++index&0x07;

beats--;

}

else{

P1|=0x0F;

}

}

voidmain(){

EA=1;

TMOD=0x01;

setTImer0(2);

TH0=T0RH;

TL0=T0RL;

ET0=1;

TR0=1;

turnMotor(2*360+180);

while(1);

}

下面是使用库函数循环左移实现的:

#include

#include

typedefunsignedcharuchar;

typedefunsignedintuint;

typedefunsignedlongulong;

ulongbeats=0;

ucharT0RH=0,T0RL=0;

voidturnMotor(ulongangle){

EA=0;

beats=angle*4076/360;

EA=1;

}

voidsetTimer0(uintms){

ulongtmp;

tmp=11059326/12;

tmp=tmp*ms/1000;

tmp=65536-tmp;

tmp+=28;

T0RL=tmp;

T0RH=tmp>>8;

}

voidinterruptTimer0()interrupt1{

staticucharbeatCode=0x33;

TH0=T0RH;

TL0=T0RL;

if(beats){

uchartmp=P1;

tmp&=0xF0;

beatCode=_crol_(beatCode,1);

tmp|=beatCode;

P1=tmp;

beats--;

}

else{

P1|=0x0F;

}

}

voidmain(){

EA=1;

TMOD=0x01;

setTimer0(2);

TH0=T0RH;

TL0=T0RL;

ET0=1;

TR0=1;

turnMotor(2*360+180);

while(1);

来源:未知   作者:工程师周亮  2018/10/1 9:00:00
栏目: [ 51单片机与步进电机]

相关阅读

AT89C2051单片机驱动步进电机的电路和源码

步进电机控制程序(c语言+51单片机)

C51单片机对步进电机正反转的控制设计

C51单片机对五线四相八拍步进电机的控制设计

89C51单片机的步进电动机用于玻璃管加热系统的设计

51单片机驱动步进电机的电路及程序设计

如何采用51单片机控制电机的旋转角度?

精度高、稳定性好的89C51单片机直流电机转速测控系统设计

AT89C2051单片机对步进电机驱动器系统的设计

51单片机学习笔记:步进电机控制,正转反转等

51单片机控制步进电机正反转并实现调速的程序设计

51单片机通过脉宽调制PWM来控制电动机实现调速的设计

89C51单片机的步进电动机控制系统设计

51单片机驱动步进电机电路及程序